function bubbleSort(arr) {
  const len = arr.length
  for (let i = 0; i < len; i++) {
    let flag = false
    // 随着交换的进行，较大的数都集中在最后，且已排序，无需再考虑它们
    for (let j = 0; j < len - 1 - i; j++) {
      if (arr[j] > arr[j + 1]) {
        // 如果前一个元素 > 下一个元素，交换两者位置
        ;[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]
        flag = true // 只要交换过一次，flag就变为true
      }
    }
    // 一次交换都没发生，数组本身有序，直接返回。此时时间复杂度是O(n)
    if (!flag) return arr
  }
  return arr
}

let testArr = [9, 8, 7, 6, 5]
let res = bubbleSort(testArr)
console.log(res)
